package com.supergzt.service;

import com.alibaba.fastjson2.TypeReference;
import org.redisson.api.RLock;

import java.util.List;

/**
 * @author 张钧
 * @Description
 * @create 2022-10-25 9:37
 */
public interface RedissonService {

	/**
	 * 保存键值对
	 * @param key 键
	 * @param value 值
	 * @param time 过期时间（秒）
	 * @param <T> 返回值类型
	 */
    <T> void setString(String key, T value, Long time);

	/**
	 * 获取值
	 * @param key 键
	 * @param typeReference 获取值类型
	 * @return 值
	 * @param <T> 值类型
	 */
	<T> T getString (String key, TypeReference<T> typeReference);

	/**
	 * 移除键值对
	 * @param tokenKey 键
	 */
	void removeString(String tokenKey);

	/**
	 * 获取并删除值
	 * @param key 键
	 * @param clazz 类型
	 * @return 值
	 * @param <T> 值类型
	 */
	<T> T getStringAndDelete(String key, Class<T> clazz);

	/**
	 * 获取并且增加
	 * @param key 键
	 * @return 值（Long）
	 */
	Long getAndIncrease(String key);

	/**
	 * 扫描符合规则的键
	 * @param scanKey 规则
	 * @return 键列表
	 */
	List<String> scanString(String scanKey);

	/**
	 * 移除多个键
	 * @param users 键列表
	 */
	void removeStringList(List<String> users);

	RLock getLock(String lock);
}
